﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Conis.Squirrel;

/*
 * Author:Conis
 * Date:
 * Description:对string类型的扩展
 */

namespace Conis.Squirrel
{
    /// <summary>
    /// 对string类型的扩展
    /// </summary>
    public static class StringExtender
    {
        /// <summary>
        /// 检查一个字符串是否超过指定长度，如果超过指定长度，则加上三点
        /// </summary>
        /// <param name="input"></param>
        /// <param name="maxLength"></param>
        /// <returns></returns>
        public static string Overlong(this string input, int maxLength)
        {
            if (string.IsNullOrEmpty(input))
            {
                return string.Empty;
            }

            if (input.Length == maxLength)
            {
                return input;
            }
            else
            {
                int length = maxLength - 3;
                if (length > input.Length)
                {
                    length = input.Length;
                }

                return string.Format("{0}...", input.Substring(0, length));
            }
        }

        /// <summary>
        /// 检查URL地址的最后一个是否有斜线符，如果没有则加上
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string LastBias(this string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return string.Empty;
            }
            return (input.LastIndexOf('/') == (input.Length - 1)) ? input : input + "/";
        }

        /// <summary>
        ///  检查文件夹最后的一个反斜线符是否存在，如果没有，则加上
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string LastBackslash(string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return string.Empty;
            }
            return (input.LastIndexOf('\\') == (input.Length - 1)) ? input : input + "\\";
        }

        /// <summary>
        /// 检查一个字符串是否只由字母与数字组成
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static bool IsLetterAndNumeric(this string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return false;
            }
            return Regex.IsMatch(input, @"^[A-Za-z0-9]+$");
        }

        /// <summary>
        /// 检查一个字符串是否为合法的邮件格式
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static bool IsMail(this string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return false;
            }
            return Regex.IsMatch(input, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        }

        /// <summary>
        /// 检查一个字符串是否为纯数字
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static bool IsNumeric(this string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return false;
            }
            return Regex.IsMatch(input, @"\d+");
        }

        /// <summary>
        /// 判断一个字符串是否为Int型
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static bool IsInt(this string input)
        {
            string pattren = @"^-*\d{1,10}$";
            if(Regex.IsMatch(input, pattren))
            {
                long tmp = Convert.ToInt64(input);
                if (tmp >= int.MinValue && tmp <= int.MaxValue)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// 判断一个字段串是否为Int型，如果是则返回转换后的Int32值，反之则返回默认值
        /// </summary>
        /// <param name="input"></param>
        /// <param name="defValue"></param>
        /// <returns></returns>
        public static int DefIsInt(this string input, int defValue)
        {
            if (input.IsNumeric())
            {
                decimal value = Convert.ToDecimal(input);
                if (value > int.MaxValue)
                {
                    return defValue;
                }
                else
                {
                    return Convert.ToInt32(input);
                }
            }
            else
            {
                return defValue;
            }
        }
    }
}
